\section{Capa de Enlace}
La capa de enlace de datos tiene que desempeñar varias funciones 
específicas, entre las que se incluyen:

\begin{enumerate}
    \item   Proporcionar una interfaz de servicio bien definida con 
            la capa de red.
    \item   Manejar los errores de transmisión.
    \item   Regular el flujo de datos para que receptores lentos no 
            sean saturados por emisores rápidos.
\end{enumerate}

\paragraph{}
Para cumplir con estas metas, la capa de enlace de datos toma de la 
capa de red los paquetes y los encapsula en tramas para transmitirlos. 
Cada trama contiene un encabezado, un campo de carga útil (payload) 
para almacenar el paquete y un terminador o final.

\subsection{Servicios proporcionados a la capa de red}

La capa de enlace de datos puede diseñarse para ofrecer varios 
servicios. 
Los servicios reales ofrecidos pueden variar de sistema a sistema. 
Tres posibilidades razonables que normalmente se proporcionan son: 

\begin{enumerate}
    \item   Servicio no orientado a la conexión sin confirmación de 
            recepción.
    \item   Servicio no orientado a la conexión con confirmación de 
            recepción.
    \item   Servicio orientado a la conexión con confirmación de 
            recepción.
\end{enumerate}

\paragraph{}
El servicio no orientado a la conexión sin confirmación de recepción 
consiste en hacer que la máquina de origen envíe tramas independientes 
a la máquina de destino sin pedir que ésta confirme la recepción. 
No se establece conexión de antemano ni se libera después. 
Si se pierde una trama debido a ruido en la línea, en la capa de 
enlace de datos no se realiza ningún intento por detectar la pérdida 
ni por recuperarse de ella. 
Esta clase de servicio es apropiada cuando la tasa de errores es 
muy baja, por lo que la recuperación se deja a las capas superiores. 

\paragraph{}
La mayoría de las LANs utilizan servicios no orientados a la 
conexión sin confirmación de recepción en la capa de enlace de datos. 

\paragraph{}
En el servicio no orientado a la conexión con confirmación de 
recepción; tampoco se utilizan conexiones lógicas, 
pero se confirma de manera individual la recepción de cada 
trama enviada. 
De esta manera, el emisor sabe si la trama ha llegado bien o no. 
Si no ha llegado en un tiempo especificado, puede enviarse nuevamente. 
Este servicio es útil en canales inestables, como los de los sistemas 
inalámbricos. 

\paragraph{}
Proporcionar confirmaciones de recepción en la capa de enlace de 
datos sólo es una optimización. La capa de red siempre puede enviar un 
paquete y esperar que se confirme su recepción. 
Si la confirmación no llega antes de que expire el temporizador, 
el emisor puede volver a enviar el mensaje. 
%El problema con esta estrategia es que las tramas tienen una longitud 
%máxima impuesta por el hardware mientras que los paquetes de la capa 
%de red no la tienen. 

\paragraph{}
En el servicio orientado a la conexión; las máquinas de origen y de 
destino establecen una conexión antes de transferir datos. 
Cada trama enviada a través de la conexión está numerada, y la capa de 
enlace de datos garantiza que cada trama enviada llegará a su destino. 
Es más, garantiza que cada trama será recibida exactamente una vez y 
que todas las tramas se recibirán en el orden adecuado. 
En contraste, con el servicio no orientado a la conexión es posible 
que una confirmación de recepción perdida cause que una trama se 
envíe varias veces y, por lo tanto, que se reciba varias veces. 
El servicio orientado a conexión proporciona a los procesos de la 
capa de red el equivalente de un flujo de bits confiable. 


Cuando se utiliza un servicio orientado a la conexión, las 
transferencias tienen tres fases distintas. 
En la primera, la conexión se establece haciendo que ambos lados 
inicialicen las variables y los contadores necesarios para saber 
cuáles tramas que han sido recibidas y cuáles no. 
En la segunda fase se transmiten una o más tramas. 
En la tercera fase, la conexión se cierra y se liberan las variables, 
los buffers y otros recursos utilizados para mantener la conexión.

\subsection{Framing}

La capa física acepta un flujo de bits puros e intenta entregarlo 
al destino. 
No se garantiza que este flujo de bits esté libre de errores. 
La cantidad de bits recibidos puede ser menor, igual o mayor que la 
cantidad de bits transmitidos, y éstos pueden tener diferentes valores. 
Es responsabilidad de la capa de enlace de datos detectar y, 
de ser necesario, corregir los errores. 

El método común es que la capa de enlace de datos divida el 
flujo de bits en tramas separadas y que calcule la suma de 
verificación de cada trama. 

\paragraph{}
Formas de separar en tramas:
\begin{enumerate}
    \item   Largo fijo. 
                %\\Puede ser poco eficiente.
    \item   Largo en el header.
                %\\Puede alterarse la cuenta de la suma al transmitirse
    \item   Delimitadores con bit stuffing.
    \item   Violación de codificación en la capa física.
\end{enumerate}


\subsection{Control de errores}

La manera normal de asegurar la entrega confiable de datos es 
proporcionar retroalimentación al emisor sobre lo que está ocurriendo
en el otro lado de la línea. 
Por lo general, el protocolo exige que el receptor regrese tramas de 
control especiales que contengan confirmaciones de recepción positivas 
o negativas de las tramas que llegan. 
Si el emisor recibe una confirmación de recepción positiva de una 
trama, sabe que la trama llegó correctamente. 
Por otra parte, una confirmación de recepción negativa significa 
que algo falló y que la trama debe transmitirse otra vez.


\subsection{Control de flujo}

\paragraph{Stop and Wait}
Los protocolos en los que el emisor envía una trama y luego espera una 
confirmación de recepción antes de continuar se denominan stop and 
wait.

\paragraph{}
Es necesaria alguna manera de distinguir entre una tramas, de parte 
del receptor, para saber si las está viendo por primera vez o si son 
una retransmisión. 
La forma evidente de lograr esto es hacer que el emisor ponga un número 
de secuencia en el encabezado de cada trama que envía. 
La única ambigüedad de este protocolo es entre una trama, m, y su 
sucesor directo, m + 1. 
Si la trama m se pierde o se daña, el receptor no confirmará su 
recepción y el emisor seguirá tratando de enviarla. 
Una vez que la trama se recibe correctamente, el receptor regresa 
una confirmación de recepción al emisor. 
Dependiendo de si el emisor recibe correctamente la trama de 
confirmación de recepción, tratará de enviar m o m + 1.
Basta con un número de secuencia de 1 bit (0 o 1). 
En cada instante, el receptor espera un número de secuencia en 
particular. 
Cualquier trama de entrada que contenga un número de secuencia 
equivocado se rechaza como duplicado.

\paragraph{Sliding Window}

En los protocolos previos, las tramas de datos se transmiten en una 
sola dirección. 
En la mayoría de las situaciones prácticas hay necesidad de transmitir 
datos en ambas direcciones. 
Una manera de lograr una transmisión de datos dúplex total es tener 
dos canales de comunicación separados y utilizar cada uno para tráfico 
de datos símplex (en diferentes direcciones). 
Si se hace esto, tenemos dos circuitos físicos separados, cada uno 
con un canal “de ida” (para datos) y un canal “de retorno” 
(para confirmaciones de recepción). 
En ambos casos, el ancho de banda del canal usado para confirmaciones 
de recepción se desperdicia casi por completo. 

Una mejor idea es utilizar el mismo circuito para datos en ambas 
direcciones. Se pueden superponer los acks a mensajes siguientes.

?`Cuánto tiempo debe esperar la capa de enlace de datos un paquete 
al cual superponer la confirmación de recepción? 
Si espera más tiempo del que tarda en terminar el temporizador del 
emisor, la trama será retransmitida, frustrando el propósito de 
enviar confirmaciones de recepción. 

\paragraph{}
Cada trama de salida contiene un número de secuencia, que va desde 
0 hasta algún número máximo. Por lo general, éste es $2^n - 1$, 
por lo que el número de secuencia encaja perfectamente en un campo 
de n bits. 
El protocolo de ventana corrediza de parada y espera utiliza n = 1, 
y restringe los números de secuencia de 0 y 1, pero las versiones más 
refinadas pueden utilizar un n arbitrario. 

En cualquier instante, el emisor mantiene un grupo de números de 
secuencia que corresponde a las tramas que tiene permitido enviar. 
Se dice que estas tramas caen dentro de la ventana emisora. 
De manera semejante, el receptor mantiene una ventana receptora 
correspondiente al grupo de tramas que tiene permitido aceptar. 
La ventana del emisor y la del receptor no necesitan tener los mismos 
límites inferior y superior, ni siquiera el mismo tamaño. 
En algunos protocolos las ventanas son de tamaño fijo, pero en otros 
pueden crecer y disminuir a medida que se envían y reciben las tramas.

Aunque estos protocolos dan a la capa de enlace de datos mayor 
libertad en cuanto al orden en que puede enviar y recibir tramas, 
se mantiene el requisito de entregar los paquetes a la capa de red 
del destino en el mismo orden en que se pasaron a la capa de enlace 
de datos de la máquina emisora.
También deben entregarse todas las tramas en el mismo orden en el que 
fueron enviadas.

Los números de secuencia en la ventana del emisor representan 
tramas enviadas, o que pueden ser enviadas, pero cuya recepción 
aún no se ha confirmado. 
Cuando llega un paquete nuevo de la capa de red, se le da el 
siguiente número secuencial mayor, y el extremo superior de la 
ventana avanza en uno. 
Al llegar una confirmación de recepción, el extremo inferior avanza 
en uno. 
De esta manera, la ventana mantiene continuamente una lista de 
tramas sin confirmación de recepción. 

Dado que las tramas que están en la ventana del emisor pueden 
perderse o dañarse en tránsito, el emisor debe mantener todas estas 
tramas en su memoria para su posible retransmisión. 
Por lo tanto, si el tamaño máximo de la ventana es n, el emisor 
necesita n buffers para contener las tramas sin confirmación de 
recepción. 

La ventana de la capa de enlace de datos receptora corresponde a las 
tramas que puede aceptar. 
Toda trama que caiga fuera de la ventana se descartará. 
Cuando se recibe la trama cuyo número de secuencia es igual al 
extremo inferior de la ventana, se pasa a la capa de red, se genera 
una confirmación de recepción y se avanza la ventana en uno. 
A diferencia de la ventana del emisor, la ventana del receptor 
conserva siempre el mismo tamaño inicial. 

\paragraph{}
Para obtener una mejor eficiencia, el emisor debería enviar w tramas 
continuamente durante un tiempo igual al tiempo de tránsito de ida
y vuelta sin llenar la ventana. Para cuando las ha terminado de enviar, 
llega el ACK de la primer trama enviada. 

La necesidad de una ventana grande en el lado emisor se presenta 
cuando el producto del ancho de banda por el retardo del viaje 
de ida y vuelta es grande. 
Si el ancho de banda es alto, incluso para un retardo moderado, 
el emisor agotará su ventana rápidamente a menos que tenga una 
ventana grande. 
Si el retardo es grande (por ejemplo, en un canal de satélite 
geoestacionario), el emisor agotará su ventana incluso con un ancho 
de banda moderado. 
El producto de estos dos factores indica básicamente cuál es la 
capacidad del canal, y el emisor necesita la capacidad de llenarlo 
sin detenerse para poder funcionar con una eficiencia máxima. 

\paragraph{Canalización}
Si la capacidad del canal es de b bits/seg, el tamaño de la trama 
de l bits y el tiempo de propagación de ida y vuelta de R segundos 
(RTT), el tiempo requerido para transmitir una sola trama es de 
l/b segundos. 
Una vez que ha sido enviado el último bit de una trama de datos, 
hay un retardo de R/2 antes de que llegue ese bit al receptor y 
un retardo de por lo menos R/2 para que la confirmación de recepción 
llegue de regreso, lo que da un retardo total de R. 
En stop and wait, la línea está ocupada durante l/b e inactiva 
durante R, dando una utilización de la línea de l/(l + bR).

Si $l < bR$, la eficiencia será menor que 50\%. 
Ya que siempre hay un delay diferente de cero para que la 
confirmación de recepción se propague de regreso, en principio la 
canalización puede servir para mantener ocupada la línea durante 
este intervalo, pero si el intervalo es pequeño, la complejidad 
adicional no justifica el esfuerzo.

El envío de tramas en canalización por un canal de comunicación 
inestable presenta problemas serios. 
¿Qué ocurre si una trama a la mitad de una serie se daña o pierde? 
Llegarán grandes cantidades de tramas sucesivas al receptor antes 
de que el emisor se entere de que algo anda mal. 
Cuando llega una trama dañada al receptor, debe descartarse, pero, 
¿qué debe hacerse con las tramas correctas que le siguen? 

\paragraph{}
Hay dos métodos básicos para manejar los errores durante la 
canalización. 

Una manera, llamada retroceso n, es que el receptor simplemente 
descarte todas las tramas subsecuentes, sin enviar confirmaciones 
de recepción para las tramas descartadas. 
Esta estrategia corresponde a una ventana de recepción de tamaño 1. 
En otras palabras, la capa de enlace de datos se niega a aceptar 
cualquier trama excepto la siguiente que debe entregar a la capa 
de red. 
Si la ventana del emisor se llena antes de terminar el temporizador, 
el canal comenzará a vaciarse. 
En algún momento, el emisor terminará de esperar y retransmitirá en 
orden todas las tramas cuya recepción aún no se haya confirmado, 
comenzando por la dañada o perdida. 
Esta estrategia puede desperdiciar bastante ancho de banda si la 
tasa de errores es alta.

La otra estrategia general para el manejo de errores cuando las 
tramas se colocan en canalizaciones se conoce como repetición 
selectiva. 
Cuando se utiliza, se descarta una trama dañada recibida, pero las 
tramas en buen estado recibidas después de ésa se almacenan en 
el buffer. 
Cuando el emisor termina, sólo la última trama sin confirmación se 
retransmite. 
Si la trama llega correctamente, el receptor puede entregar a la 
capa de red, en secuencia, todas las tramas que ha almacenado en 
el buffer. 
La repetición selectiva con frecuencia se combina con el hecho de 
que el receptor envíe una confirmación de recepción negativa (NAK) 
cuando detecta un error, por ejemplo, cuando recibe un error de suma 
de verificación o una trama en desorden. 
Las confirmaciones de recepción negativas estimulan la retransmisión 
antes de que el temporizador correspondiente expire y, por lo tanto, 
mejoran el rendimiento. 

La repetición selectiva corresponde a una ventana del receptor 
mayor que 1. 
Cualquier trama dentro de la ventana puede ser aceptada y mantenida 
en el buffer hasta que todas las que le preceden hayan sido pasadas 
a la capa de red. 
Esta estrategia puede requerir cantidades grandes de memoria en la 
capa de enlace de datos si la ventana es grande. 

Estas dos estrategias alternativas son intercambios entre el 
ancho de banda y el espacio de buffer en la capa de enlace de datos. 
Dependiendo de qué recurso sea más valioso, se puede utilizar 
uno o el otro. 

\paragraph{}
Como máximo pueden estar pendientes MAX\_SEQ tramas, y no 
MAX\_SEQ + 1 en cualquier momento, aun cuando haya MAX\_SEQ + 1 
números de secuencia diferentes. 
Para ver por qué es necesaria esta restricción, se muestra un ejemplo 
con MAX\_SEQ = 7. 

\begin{enumerate}
    \item   El emisor envía las tramas 0 a 7.
    \item   En algún momento llega al emisor una confirmación de 
            recepción, superpuesta, para la trama 7.
    \item   El emisor envía otras ocho tramas, nuevamente con los 
            números de secuencia 0 a 7. 
    \item   Llega otra confirmación de recepción, superpuesta, 
            para la trama 7. 
\end{enumerate}

¿Llegaron con éxito las ocho tramas que correspondían al segundo 
bloque o se perdieron (contando como pérdidas los rechazos 
siguientes a un error)? 
En ambos casos el receptor podría estar enviando la trama 7 como 
confirmación de recepción. 
El emisor no tiene manera de saberlo. 
Por esta razón, el número máximo de tramas pendientes debe 
restringirse a MAX\_SEQ. 

\paragraph{}
Dado que un emisor puede tener que retransmitir en un momento 
futuro todas las tramas no confirmadas, debe retener todas las 
tramas retransmitidas hasta saber con certeza que han sido 
aceptadas por el receptor. 
Al llegar una confirmación de recepción para la trama n, las tramas 
n - 1, n - 2, y demás, se confirman de manera automática. 
Cuando llega una confirmación de recepción, la capa de enlace de 
datos revisa si se pueden liberar buffers.

Una vez que el receptor ha avanzado su ventana, el nuevo intervalo 
de números de secuencia válidos se solapa con el anterior. 
En consecuencia, el siguiente grupo de tramas podría ser de tramas 
duplicadas (si se perdieron todas las confirmaciones de recepción) 
o de nuevas (si se recibieron todas las confirmaciones de recepción).
Para evitar este problema el tamaño máximo de la ventana debe ser 
de por lo menos la mitad del intervalo de los números de secuencia.



%La tarea de la capa de enlace de datos es convertir el flujo de 
%bits en bruto ofrecido por la capa física en un flujo de tramas 
%para que la capa de red lo utilice. 
%Se emplean varios métodos de entramado, incluidos el conteo de 
%caracteres, el relleno de bytes y el relleno de bits. 
%Los protocolos de enlace de datos pueden proporcionar control 
%de errores para retransmitir tramas dañadas o perdidas. 
%Para evitar que un emisor rápido sature a un receptor lento, 
%el protocolo de enlace de datos también puede proporcionar control 
%de flujo. 
%El mecanismo de ventana corrediza se emplea ampliamente para integrar 
%el control de errores y el control de flujo de una manera conveniente.
%Los protocolos de ventana corrediza pueden clasificarse por el 
%tamaño de la ventana del emisor y por el tamaño de la ventana del 
%receptor. 
%Cuando ambos son iguales a 1, el protocolo es de parada y espera. 
%Cuando el tamaño de la ventana del emisor es mayor que 1, por ejemplo, 
%para evitar el bloqueo del emisor en un circuito con un retardo de 
%propagación grande, el receptor puede programarse para descartar 
%todas las tramas diferentes a la siguiente de la secuencia o 
%almacenar en el buffer tramas fuera de orden hasta que se necesiten.








 












 


 

  

 



 

 

















